# 线程是最小的执行单元，而进程由至少一个线程组成
# Unix/Linux操作系统提供了一个fork()系统调用，它非常特殊。普通的函数调用，调用一次，返回一次，但是fork()调用一次，返回两次，因为操作系统自动把当前进程（称为父进程）复制了一份（称为子进程），然后，分别在父进程和子进程内返回。

# 子进程永远返回0，而父进程返回子进程的ID。这样做的理由是，一个父进程可以fork出很多子进程，所以，父进程要记下每个子进程的ID，而子进程只需要调用getppid()就可以拿到父进程的ID。

# coding: utf-8
from multiprocessing import Process # multiprocessing即可创建跨平台多进程
import os #只能运行在linux系统上,无法运行到Windows系统上
# 由于 multiprocessing.Process 导入后未使用，将其移除
import time,random

print('Process(%s) start...' % os.getpid())
# pid = os.fork()
# if pid == 0:
#     print('I am child Process%s,my parent is %s' %(os.getpid(),os.getppid()))
# else:
#     print('I am parent Process %s ,my child is %s ' %(os.getpid(),pid))


def run_proc(name):
    print('Child Process %s %s is running...'%(name,os.getpid()))

print("------------------使用windows调用---------------------")

if __name__ == '__main__':
    print("Parent Process %s is running...",os.getpid())
    # 创建子进程时,只需要传入一个执行函数和函数的参数,创建一个Process实例,用start()方法启动,
    # join()方法用于等待子进程结束后再继续往下运行,相当于阻塞了进程的异步执行
    p = Process(target=run_proc,args=('testProcess',))
    p.start()
    p.join()
    


        